/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package be.ulb.f203.projet.metier;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author Srk
 */
public final class Chemin {

    private List<Noeud> noeuds;
    private List<Arc> arcs;
    private double cout;
    private Graphe graphe;
    /**
     * Crée un chemin dans un graphe donné.
     * @param graphe Graphe dans lequel le chemin est construit.
     */
    public Chemin(Graphe graphe) {
        this(graphe, null);
    }
    /**
     * Crée un chemin dans un graphe donnée à partir d'un tableau de noeud successifs.
     * @param g Graphe dans lequel le chemin est construit.
     * @param noeuds Tableau de noeud successifs
     */
    public Chemin(Graphe g, Noeud[] noeuds) {
        this.graphe = g;
        cout = 0;
        arcs = new ArrayList<>();
        this.noeuds = new ArrayList<>();
        if (noeuds != null) {
            this.noeuds.add(noeuds[0]);
            for (int i = 1; i < noeuds.length; i++) {
                this.noeuds.add(noeuds[i]);
                addArc(graphe.getArc(noeuds[i - 1], noeuds[i]));
            }
        }
    }
    /**
     * Retourne la liste d'arcs parcourus par le chemin.
     * @return 
     */
    public List<Arc> getArcs() {
        return arcs;
    }
    /**
     * Retourne le coût du chemin dans le graphe.
     * @return 
     */
    public double getCout() {
        return cout;
    }
    /**
     * Ajoute un arc dans le chemin.
     * @param arc Arc ajouté au chemin.
     */
    public void addArc(Arc arc) {
        arcs.add(arc);
        cout += arc.getPoids();
    }
    /**
     * Retourne la liste de noeuds parcourus par le chemin.
     * @return 
     */
    public List<Noeud> getNoeuds() {
        return noeuds;
    }

    @Override
    public String toString() {
        String res = "";
        //for(int i = 0 )
        for (Noeud noeud : noeuds) {
            res += noeud.getValue() + " >> ";
        }
        res += cout;
        return res;
    }
}
